package user.student;

import java.util.Arrays;
import java.util.Scanner;

/**
 * 作者：威哥
 * 时间：2024/3/26
 * 描述：永无Bug
 */
public class StudentManager {
    //表示学生数组
     String[] names = {};
    //表示学生个数
     int size = 0;

    //判断学员是否存在
    public  int exists(String name){
        for (int i = 0; i < size; i++) {
            if(name.equals(names[i])){
                return i;
            }
        }
        return -1;
    }

    //增加
    public  boolean add(String name){
        //1、判断学生是否存在
        int index = exists(name);
        if(index != -1){ //表示存在
           return false;
        }
        //2、判断是否需要扩容
        if(size == names.length){
            names = Arrays.copyOf(names,names.length+5);
        }
        //3、将name保存到数组中
        names[size] = name;
        //4、学生个数+1
        size++;
        return true;
    }

    //修改
    public  boolean update(String oldName,String newName){
        //1、判断是否存在
        int index = exists(oldName);
        if(index == -1){ //表示不存在
            return false;
        }
        //2、判断新姓名是否存在
        if(exists(newName) != -1 ){//新姓名存在 。不能修改
            return false;
        }
        //3、将元素组中的元素改成newName
        names[index] = newName;

        return true;
    }

    //删除
    public  boolean delete(String name){
        //1、判断要删除姓名是否存在
        int index = exists(name);
        if(index == -1 ){//表示不存在
            return false;
        }
        //2、先判断是否是极端情况
        if(size % 5 == 0){
            names = Arrays.copyOf(names,names.length+5);
        }
        //3、从当前要删除的元素开始，循环将后面的元素覆盖到当前元素。
        for (int i = index; i < size; i++) {
            names[i] = names[i+1];
        }
        //4、学生个数-1
        size--;
        return true;
    }

    //查询
    public  String[] select(){
        return names;
    }


    //==========================================================================

    Scanner sc = new Scanner(System.in);

    public  void menu(){
        System.out.println("                       _oo0oo_");
        System.out.println("                      o8888888o");
        System.out.println("                     88\" . \"88");
        System.out.println("                      (| -_- |)");
        System.out.println("                     0\\  =  /0");
        System.out.println("                    ___/`---'\\___");
        System.out.println("                  .' \\|     |// '.");
        System.out.println("                / _||||| -:- |||||- \\");
        System.out.println("               |   | \\\\\\  -  /// |   |");
        System.out.println("               | \\_|  ''\\---/''  |_/ |");
        System.out.println("               \\  .-\\__  '-'  ___/-. /");
        System.out.println("             ___'. .'  /--.--\\  `. .'___");
        System.out.println("          .\"\" '<  `.___\\_<|>_/___.' >' \"\".");
        System.out.println("         | | :  `- \\`.;`\\ _ /`;.`/ - ` : | |");
        System.out.println("         \\  \\ `_.   \\_ __\\ /__ _/   .-` /  /");
        System.out.println("     =====`-.____`.___ \\_____/___.-`___.-'=====");
        System.out.println("                       `=---='");
        System.out.println("                                                ");
        System.out.println("                                                ");
        System.out.println("     ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~         ");
        System.out.println("                    佛祖保佑         永无BUG         ");
        System.out.println("====================欢迎使用千锋学生管理系统====================");
        while(true){
            System.out.println("请选择功能1、增加\t2、删除\t3、修改\t4、查询");
            int option = sc.nextInt();
            switch (option){
                case 1:
                    addView();
                    break;
                case 2:
                    delView();
                    break;
                case 3:
                    updateView();
                    break;
                case 4:
                    findView();
                    break;
                case 5:
                    System.out.println("欢迎下次使用");
                    return;
                default:
                    System.out.println("输入有误请重新输入");
            }

        }
    }

    //判断数组里面是否存在null，如果存在将null去除
    public  String[] isNull(String[] arrs){
        int n = 0;
        for (String arr : arrs) {
            if (arr == null){
                n++;
            }
        }
        arrs = Arrays.copyOf(arrs,arrs.length - n);
        return arrs;
    }

    private  void findView() {
        String[] names = select();
        names = isNull(names);
        Arrays.sort(names);
        if(names.length == 0){
            System.out.println("暂无学生信息");
        }else{
            for (int i = 0; i < size; i++) {
                System.out.print(names[i]+"\t");
                if(i !=0 && i % 5 == 0){
                    System.out.println();
                }
            }

            System.out.println();
        }

    }

    private  void updateView() {
        System.out.println("请输入要修改的学生姓名");
        String oldName = sc.next();
        int index = exists(oldName);
        if(index == -1){ //表示 不存在
            System.out.println("你要修改的姓名不存在，无法修改");
        }else{
            System.out.println("请输入要改成的姓名");
            String newName = sc.next();
            boolean flag = update(oldName, newName);
            if(flag){
                System.out.println("恭喜你,修改成功");
            }else{
                System.out.println("不好意思,修改失败");
            }
        }

    }

    private  void delView() {
        System.out.println("请输入要删除的学生姓名");
        String name = sc.next();
        boolean flag = delete(name);
        if(flag){
            System.out.println("恭喜你,删除成功");
        }else{
            System.out.println("不好意思,删除失败");
        }
    }

    //增加页面
    private  void addView() {
        System.out.println("请输入要增加的学生姓名");
        String name = sc.next();
        //调用后端的业务接口
        boolean flag = add(name);
        if(flag){
            System.out.println("恭喜，添加成功");
        }else{
            System.out.println("不好意思，添加失败");
        }
    }

//    public static void main(String[] args) {
//
//
//        menu();
//    }

}
